/*
 * 26-abr-2008 
 */
package futbol.tacticas.concursantes.chuky.futbolista;

import java.awt.Point;

import futbol.tacticas.concursantes.chuky.util.Balon;

/**
 *
 * @author Joan Crosas
 */
public abstract class FutbolistaGenerico implements FutbolistaBase {


	public boolean puedoLlegar( Point posicion, int tiempo ) {
		return puedoLlegar( posicion, tiempo, 0 );
	}
	
	public boolean puedoLlegar( Point posicion, int tiempo, int tiempoAnticipacion ) {
		double distance = getPosicion().distance( posicion ) - FutbolistaBase.DISTANCIA_BALON_ENCIMA;
		if( distance < distanciaMovimiento( tiempo + tiempoAnticipacion ) ) {
			return true;
		}
		return false;
	}

	public int puedoInterceptar( Balon balon ) {
		return puedoInterceptar( balon, 0 );
	}
	
	public int puedoInterceptar( Balon balon, int tiempoMargen ) {
		return puedoInterceptar( balon, tiempoMargen, 0 );
	}
	
	public int puedoInterceptar( Balon balon, int tiempoMargen, int tiempoAnticipacion ) {
		int tiempo = 1;
		while( tiempo < FutbolistaBase.TIEMPO_MAX_PASE) {
			Point posicionFuturaBalon = balon.getPosicion( tiempo );
			int margen = tiempo - tiempoMargen + tiempoAnticipacion;
			if( margen < 0 ) {
				margen = 0;
			}
			if( balon.getVelocidad( tiempo ) < 15 && puedoLlegar( posicionFuturaBalon, margen, tiempoAnticipacion ) ) {
				return tiempo;
			}
			tiempo++;
		}
		
		return FutbolistaBase.TIEMPO_MAX_PASE;
	}
	
	public boolean balonEncima( Balon balon ) {
		if( balon.getVelocidad() < 15 && getPosicion().distance( balon.getPosicion() ) < FutbolistaBase.DISTANCIA_BALON_ENCIMA ) {
			return true;
		}
		return false;
	}

	public double distanciaMovimiento( int tiempo ) {
		return getVelocidad() * tiempo;
	}

}
